package com.yehui.algorithm.sword;

/**
 * 输入一个复杂链表（每个节点中有节点值，以及两个指针，一个指向下一个节点，另一个特殊指针指向任意一个节点），返回结果为复制后复杂链表的head。
 * （注意，输出结果中请不要返回参数中的节点引用，否则判题程序会直接返回空）
 * Created by XuChunH on 2016/9/16.
 */
public class LinkedListClone {
    public RandomListNode clone(RandomListNode pHead){
        if(pHead == null){
            return null;
        }
        RandomListNode temp = pHead;
        while (temp != null){
            RandomListNode clone = new RandomListNode(temp.label);
            clone.next = temp.next;
            temp.next  = clone;
            temp = clone.next;
        }
        temp = pHead;
        while (temp != null){
            if(temp.random != null){
                temp.next.random = temp.random.next;
            }

            temp = temp.next.next;
        }
        RandomListNode cloneHead = pHead.next;
        temp = pHead;
        RandomListNode clonedNode = cloneHead;
        while (clonedNode.next != null){
            temp.next = clonedNode.next;
            clonedNode.next = temp.next.next;
            temp = temp.next;
            clonedNode = clonedNode.next;
        }
        return cloneHead;
    }
}
